/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.financeiro.view;

import br.jm.financeiro.datamodel.LazyCidade;
import br.jm.financeiro.entity.CepCidade;
import br.jm.financeiro.entity.CepUf;
import br.jm.financeiro.sistema.eao.CepUfEao;
import br.jm.financeiro.sistema.eao.CidadeEao;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.event.SelectEvent;
import org.primefaces.model.LazyDataModel;

/**
 *
 * @author joao
 */
public class CidadeBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private CepCidade selectedCidade;
    private CepUf cepUf;
    private LazyDataModel<CepCidade> lazyModel;
    private final CidadeEao cidadeEAO;
    private List<CepUf> cepUfList;
    private final CepUfEao cepUfEAO;
    private Map<String, Object> pesquisas = new HashMap<>();
    private boolean edita = true;

    public CidadeBean() {
        cidadeEAO = CidadeEao.getInstance();
        cepUfEAO = CepUfEao.getInstance();
        cepUf = new CepUf();
        selectedCidade = new CepCidade();
        selectedCidade.setCodUf(cepUf);

        lazyModel = new LazyCidade(cidadeEAO);
    }

    public void inserir(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            selectedCidade.setCodCidade(null);
            cidadeEAO.create(selectedCidade);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, LoginBean.AtualizaLog("", "Cidade Inserida com Sucesso: ".concat(selectedCidade.getDscCidade())), selectedCidade.getDscCidade());

        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Inserir: " + selectedCidade.getDscCidade(), e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
            this.edita = true;
        }
    }

    public void alterar(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            cidadeEAO.edit(selectedCidade);
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, LoginBean.AtualizaLog("", "Cidade Alterada com Sucesso: ".concat(selectedCidade.getDscCidade())), selectedCidade.getDscCidade());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Alterar: " + selectedCidade.getDscCidade(), e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void excluir(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            cidadeEAO.destroy(selectedCidade);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, LoginBean.AtualizaLog("", "Cidade Excluida com Sucesso: ".concat(selectedCidade.getDscCidade())), selectedCidade.getDscCidade());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Excluir: " + selectedCidade.getDscCidade(), e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public List<String> complete(String query) {
        pesquisas.clear();
        pesquisas.put("codUf", query);
        List<String> results = new ArrayList<>();

        cepUfList = new ArrayList<>();
        try {
            cepUfList = cepUfEAO.getNative("CepUf", 0, 15, "dscEstado", true, pesquisas, null);

            for (CepUf cepUfList1 : cepUfList) {
                results.add(cepUfList1.getCodUf());
            }
        } catch (Exception ex) {
            //Logger.getLogger(CidadeBean.class.getName()).log(Level.SEVERE, null, ex);
        }

        return results;
    }

    public LazyDataModel<CepCidade> getLazyModel() {
        return lazyModel;
    }

    public void setLazyModel(LazyDataModel<CepCidade> lazyModel) {
        this.lazyModel = lazyModel;
    }

    public CepCidade getSelectedCidade() {
        if (selectedCidade == null) {
            selectedCidade = new CepCidade();
        }
        return selectedCidade;
    }

    public void setSelectedCidade(CepCidade selectedCidade) {
        this.selectedCidade = selectedCidade;
    }

    public void onRowSelect(SelectEvent event) {
        this.selectedCidade = (CepCidade) event.getObject();
    }

    public boolean isEdita() {
        return edita;
    }

    public void setEdita(boolean edita) {
        this.edita = edita;
    }

    public void preparaInserir(ActionEvent actionEvent) {
        cepUf = new CepUf();
        this.selectedCidade = new CepCidade();
        this.selectedCidade.setCodUf(cepUf);
        this.edita = false;
    }
}
